CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW文は、SelectQueryで指定された表に対するビューを作成します。ビューを作成するために使用された元の表は、ディテール表と呼ばれます。
アクセス制御
TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。
SQL構文
CREATE MATERIALIZED VIEW ViewName AS SelectQuery
[PRIMARY KEY (ColumnName [,...])]
[UNIQUE HASH ON (HashColumnName [,...])
PAGES = PrimaryPages]
パラメータ
CREATE MATERIALIZED VIEW文には、次のパラメータがあります。
ViewName | 新しいビューに割り当てる名前を指定します。 |
SelectQuery | ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。 |
ColumnName | 作成されるビューの主キー列の名前を指定します。主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。 |
HashColumnName | ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定された列は、主キーに指定された列と同じである必要があります。 |
PrimaryPages | 表の想定ページ数を指定します。この数値に基づいて、ハッシュ索引用に作成されるハッシュ・バケットの数が決まります。最小値は1です。想定したページ数が少なすぎると、パフォーマンスが低下します。詳細は、 「CREATE TABLE」を参照してください。 |
説明
マテリアライズド・ビューとディテール表の制限事項
- マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対してDELETE、UPDATEまたはINSERT文を実行することはできません。
- マテリアライズド・ビューが更新されたときに、オーバーフローまたはアンダーフロー状態が発生するように指定されている場合、レプリケートされた表に定義されたマテリアライズド・ビューで、レプリケーション障害または非一貫性が発生する場合があります。
- ディテール表はレプリケートできますが、ビュー自体はレプリケートできません。ディテール表がレプリケートされると、対応するビューがTimesTenによって自動的に更新されます。
- ビューとそのディテール表は、いずれもキャッシュ・グループの構成要素にすることはできません。
- マテリアライズド・ビューやディテール表に対して、TimesTenが自動的に索引を作成することはありません。マテリアライズド・ビューに対して参照制約は定義できません。
- デフォルトでは、マテリアライズド・ビューで主キーを使用するためにTツリー索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。
- ALTER TABLE文で列の追加または削除を行うことはできません。マテリアライズド・ビューの構造を変更するには、ビューを削除してから再度作成します。
MATERIALIZED VIEW問合せの制限
マテリアライズド・ビューの定義に使用される問合せには、いくつかの制限があります。
- マテリアライズド・ビュー定義のSELECT *問合せは、ビューの作成時に実行されます。マテリアライズド・ビューの作成後に追加された列は、マテリアライズド・ビューには反映されません。
- 一時表は、マテリアライズド・ビュー定義では使用できません。非マテリアライズド・ビューおよび導出表は、マテリアライズド・ビューを定義するときに使用できません。
- GROUP BYのリストに含まれるすべての列が、SELECT構文のリストに含まれている必要があります。
- 集計ビューのSELECT構文のリストに、COUNT(*)が含まれている必要があります。
- SUMとCOUNTは使用可能です。ただし、AVGのように、それらを利用する式は使用できません。
- 次の句はマテリアライズド・ビューを作成するSELECT文で使用できません。
- SELECT構文のリストの各式には、一意の名前が必要です。列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。
- SELECT FOR UPDATEまたはSELECT FOR INSERT文は、ビューでは使用できません。
- OUTER JOINは使用できますが、SELECTリストは、OUTER JOINに指定した各内部表に1つ以上のNULL値可能でない列を投影する必要があります。マテリアライズド・ビューの定義でのSELECTの外部結合構文は、トップ・レベルのSELECTの場合と同じです。SELECT文に対する制限が適用されます。マテリアライズド・ビューのOUTER JOINを指定するには、(+)記号を使用する必要があります。
- 各内部表は、最大1つの表との外部結合のみ可能です。
- 自己結合を使用できます。自己結合とは、表をその表自体に結合することです。この表はFROM句に2度現れ、その後ろに表の別名が続き、結合条件に使用する列名を修飾します。
customer表とbookOrder表の列からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW CustOrder AS
SELECT custNo, custName, ordNo, book
FROM customer, bookOrder
WHERE customer.custNo=bookOrder.custNo;
例5.39
t1表のx1およびy1列からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW v1 AS SELECT x1, y1 FROM t1
PRIMARY KEY (x1) UNIQUE HASH (x1) PAGES=100;
例5.40
表t1とt2の列x1およびy1の外部結合から、マテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2
WHERE x1=x2(+);
関連項目
CREATE TABLE
CREATE VIEW
DROP VIEW